﻿#include "TcpSocket.h"     // 引入自定义的 TCP Socket 封装类头文件
#include <iostream>        // 标准输入输出流
#include <vector>          // 使用 std::vector 容器存放数据
#include <string>          // 使用 std::string 字符串类
int main() {
    TcpSocket server;  // 创建一个 TcpSocket 对象，用作服务端
    // 启动服务端监听，监听 8080 端口
    if (!server.startServer(8080)) {
        std::cerr << "Server failed to start\n"; // 如果启动失败，输出错误信息
        return -1;                               // 返回 -1 表示程序异常退出
    }
    std::cout << "Server started on port 8080\n"; // 成功启动服务端
    // 设置服务端的异步接收回调函数
    // 捕获 server 引用 [&server]，这样在回调函数里可以调用 server 的成员函数
    server.startAsyncRecv([&server](int fd, const std::vector<char>& data){
        // 将接收到的数据（vector<char>）转为 std::string 方便处理
        std::string msg(data.begin(), data.end());
        std::cout << "[Server received from client " << fd << "] " << msg << "\n";
        // 拼接回显消息（Echo + 原始消息）
        std::string echo = "Echo: " + msg;
        // 异步发送回显消息给客户端
        server.sendDataAsync(fd, std::vector<char>(echo.begin(), echo.end()));
    });
    // 控制台提示用户：按回车键结束服务器
    std::cout << "Press Enter to stop server...\n";
    std::cin.get();  // 等待用户输入（阻塞），直到按下回车
    // 停止服务端，关闭监听和所有客户端连接
    server.stopServer();
    std::cout << "Server stopped\n"; // 打印服务端已关闭的提示信息
    return 0; // 程序正常结束
}
